package com.example.im.model;

import android.content.Context;

import com.example.im.model.bean.UserInfo;
import com.example.im.model.dao.UserAccountDao;
import com.example.im.model.db.DBManager;

import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

//数据模型层全局类
public class Model {

    private Context mContext;
    private ExecutorService executors= Executors.newCachedThreadPool();

    //创建对象（只在本类中使用私有和全局,加static一方面类加载的时候就执行静态方法，另一方面也是为了下面getInstance返回一个对象）
    private static Model model=new Model();

    private UserAccountDao userAccountDao;
    private DBManager dbManager;

    //私有化构造(为了不让用户创建新的实例对象)
    private Model(){

    }

    //获取单例对象
    public static Model getInstance(){
        return model;
    }

    //初始化的方法
    public void init(Context context){
        mContext=context;
        //创建用户账号数据库的操作类对象
        userAccountDao = new UserAccountDao(mContext);//因为要传context如果放在外面会因为为空报空指针，所以init方法里

        //开启全局监听
        EventListener eventListener = new EventListener(mContext);
    }

    //获取全局线程池对象
    public ExecutorService getGlobalThreadPool(){
        return  executors;
    }

    //用户登录成功后的处理方法
    public void loginSuccess(UserInfo account){

        //校验
        if(account==null){
            return;
        }

        if(dbManager!=null){
            dbManager.close();
        }

        //登录成功后创建邀请表和联系表数据库的管理类
        dbManager = new DBManager(mContext, account.getName());

    }

    public DBManager getDbManager(){
        return dbManager;
    }


    //用户账号数据库的操作类 UserAccountDao属于模型层Model的数据
    //获取用户账号数据库操作类对象
    public UserAccountDao getUserAccountDao(){
        return userAccountDao;
    }

}
